Get Node Info
Returns basic information about a ULedger node, including its current software version, node identifier, and peer identifier on the network.
Request
GET /
When using the dev node, the full URL is:https://tn-w-1.uledger.net//
Response
On success, the endpoint returns a JSON object with the following fields:
nodeVersion– String representing the current node software version or build.nodeId– The public identifier of this node on the ULedger network (typically a long hex-encoded public key).peerId– The libp2p peer ID used by this node when connecting to other peers.
Example response
{
"nodeVersion": "9373386",
"nodeId": "04A78BDDB8EF9D9048F7A6D9F9D4DF53839D28554C9ABB1E4B4A27BF25CA23F80C925D0E4CF825E6A5DCDFA551507A418ABD9ACF489CC4D20644CD4AC19A1779C5",
"peerId": "12D3KooWEPdufv8LnWqkqyRXunYNRDmiZ1cYUTeT6vHiGY8FBugT"
}
- cURL
curl -X GET -L https://tn-w-1.uledger.net// | jq
// Using native fetch (Node 18+)
const res = await fetch("https://tn-w-1.uledger.net//");
if (!res.ok) {
throw new Error(`Request failed with status ${res.status}`);
}
const data = await res.json();
console.log(data.nodeVersion);
console.log(data.nodeId);
console.log(data.peerId);
import requests
resp = requests.get("https://tn-w-1.uledger.net//")
resp.raise_for_status()
data = resp.json()
print(data["nodeVersion"])
print(data["nodeId"])
print(data["peerId"])
Get Node Health
Returns a combined health snapshot for this ULedger node, including its software version, node identifier, network connectivity, and the list of blockchains it is currently tracking. This one provides an overview of the node's status and connectivity.
Request
GET /health
For the dev node, the full URL is:https://tn-w-1.uledger.net//health
Response
On success, the endpoint returns a JSON object with the following fields:
nodeVersion– String representing the current node software version or build.nodeId– The public identifier of this node on the ULedger network (typically a long hex-encoded public key).network– Object describing P2P network status:networkType– Type of network (for example,p2p).peerCount– Number of peers currently connected.peerId– This node's libp2p peer ID.networkPeers– Array of peer IDs this node is connected to.
blockchains– Array of blockchain identifiers that this node is tracking.
Example response
{
"nodeVersion": "9373386",
"nodeId": "04A78BDDB8EF9D9048F7A6D9F9D4DF53839D28554C9ABB1E4B4A27BF25CA23F80C925D0E4CF825E6A5DCDFA551507A418ABD9ACF489CC4D20644CD4AC19A1779C5",
"network": {
"networkType": "p2p",
"peerCount": 9,
"peerId": "12D3KooWEPdufv8LnWqkqyRXunYNRDmiZ1cYUTeT6vHiGY8FBugT",
"networkPeers": [
"12D3KooWRsMAxQbBypJaDD4VrqxCEiNR1W9Ayj6vDAF8pQ2qwCdX",
"12D3KooWDbHuY1gn4fWkhbyKVRyFU1t1678rzdNUEbfdVbPaADYW",
"12D3KooWPxsRpT133cgBire1NHvaXnqLuvYtdySGPkRfNgYwkK21",
"12D3KooWNxwUTaerJJcUPNjS3xrwTTZNsfZVi9nZ6eSYXCvBZcfi",
"12D3KooWBoU3AJFfp6UEUn7gcNfKYwW1Le7iZgT1Hb8dh5J1gB4c",
"12D3KooWLq1ZSwz1KABjGY4ZBT8Z25MkGfz79X6xkGJs11Mc11PV",
"12D3KooWRL7UbgUUEg3N2jePTEc1ZAG2a7gqyrSiTz7YnVfuKuRi",
"12D3KooWLJzDBqzPrMnYkahBX4ptLoKd4eWJxZeDpFhg328JkBgX",
"12D3KooWNYcV3Z6gFjGcmFGEPWr7wLVW28bHDEyHZChB1UC9WrBB"
]
},
"blockchains": [
"08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2"
]
}
- cURL
curl -X GET -L https://tn-w-1.uledger.net//health | jq
// Using native fetch (Node 18+)
const res = await fetch("https://azure.dev.node1.uledger.net/health");
if (!res.ok) {
throw new Error(`Request failed with status ${res.status}`);
}
const data = await res.json();
console.log(data.nodeVersion);
console.log(data.nodeId);
console.log(data.network.peerCount);
console.log(data.blockchains);
import requests
resp = requests.get("https://azure.dev.node1.uledger.net/health")
resp.raise_for_status()
data = resp.json()
print(data["nodeVersion"])
print(data["nodeId"])
print(data["network"]["peerCount"])
print(data["blockchains"])
List Blockchains
Returns the list of blockchain identifiers that this node is currently aware of or managing.
Request
GET /blockchains
For the dev node, the full URL is:https://tn-w-1.uledger.net//blockchains
Response
On success, the endpoint returns a JSON array of strings. Each entry is a unique blockchain identifier (for example, a hash or logical ID).
Example response
[
"08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2"
]
In this example, the node is tracking two blockchains, identified by the two hashes in the array.
- cURL
curl -X GET -L https://tn-w-1.uledger.net//blockchains | jq
// Using native fetch (Node 18+)
const res = await fetch("https://tn-w-1.uledger.net//blockchains");
if (!res.ok) {
throw new Error(`Request failed with status ${res.status}`);
}
const blockchains = await res.json();
for (const id of blockchains) {
console.log("Blockchain ID:", id);
}
import requests
resp = requests.get("https://tn-w-1.uledger.net//blockchains")
resp.raise_for_status()
blockchains = resp.json()
for chain_id in blockchains:
print("Blockchain ID:", chain_id)
Get Blockchain Info
Returns detailed information about a specific blockchain managed by this node, including height, council status, consensus configuration, and connected peers.
Request
GET /blockchains/{blockchainId}
For the example blockchain, the full URL is:https://tn-w-1.uledger.net//blockchains/08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2
Path parameters
blockchainId– The blockchain identifier returned byGET /blockchains.
Response
The response contains structural and status information:
blockHeight– Current height (latest block index) of this blockchain.lastMessageTime– Timestamp of the last processed message or block.keyType– Type of consensus/public keys used (e.g.secp256k1).isInCouncil– Whether this node is a council member.isVoting,isTimeToVote– Voting state flags for the current round.syncing– Indicates if the node is currently syncing this chain.pendingMessagesCount,delayedMessagesCount,pendingTransactions– Queued items still to be processed.councilMembers– Array of council member public keys.voteSessions– Active vote sessions keyed by session ID (height, round, leader, and required votes).consensus– Consensus configuration (type, thresholds, timeouts).features– Feature flags enabled for this blockchain.blockchainPeers– List of peer IDs participating in this blockchain.
Example response
{
"blockHeight": 2275,
"lastMessageTime": "2025-11-25T16:20:53Z",
"keyType": "secp256k1",
"isInCouncil": true,
"isVoting": false,
"isTimeToVote": false,
"syncing": false,
"pendingMessagesCount": 0,
"delayedMessagesCount": 0,
"pendingTransactions": 0,
"councilMembers": [
"02F94D90705053FFFCBC79AFB6A058E2F66FAE707FE86E1381779F085A59524F46",
"0306CE9B36888DEB9593FE021182C1CCCCCE6BB1277BD311D868F113685BB4EF0A",
"035229CC755EFEAD01FA0E9D4EA22CD356D0A6E385B10B82859083924356C9D555",
"03A78BDDB8EF9D9048F7A6D9F9D4DF53839D28554C9ABB1E4B4A27BF25CA23F80C"
],
"voteSessions": {
"f0c3d1eddf9a480c6cbedb864629cde761342a6407d028ebefc38d45c498ef7d": {
"sessionId": "f0c3d1eddf9a480c6cbedb864629cde761342a6407d028ebefc38d45c498ef7d",
"blockHash": "",
"blockHeight": 2276,
"round": 418,
"currentStage": 0,
"currentLeader": "02F94D90705053FFFCBC79AFB6A058E2F66FAE707FE86E1381779F085A59524F46",
"consensusRequired": 2
}
},
"consensus": {
"consensusType": "council_leader_proposal",
"txKarmaThreshold": 5,
"txMintThreshold": 1,
"txMaxTimeTrigger": "1h0m0s",
"minMembers": 4,
"consensusTimeout": "30m0s"
},
"features": {
"enableJoinCouncilOnStartup": false,
"enableXMOnBlockMint": false,
"enableTxProof": false
},
"blockchainPeers": [
"12D3KooWLq1ZSwz1KABjGY4ZBT8Z25MkGfz79X6xkGJs11Mc11PV",
"12D3KooWRsMAxQbBypJaDD4VrqxCEiNR1W9Ayj6vDAF8pQ2qwCdX",
"12D3KooWPxsRpT133cgBire1NHvaXnqLuvYtdySGPkRfNgYwkK21",
"12D3KooWNxwUTaerJJcUPNjS3xrwTTZNsfZVi9nZ6eSYXCvBZcfi",
"12D3KooWNYcV3Z6gFjGcmFGEPWr7wLVW28bHDEyHZChB1UC9WrBB",
"12D3KooWRL7UbgUUEg3N2jePTEc1ZAG2a7gqyrSiTz7YnVfuKuRi",
"12D3KooWDbHuY1gn4fWkhbyKVRyFU1t1678rzdNUEbfdVbPaADYW",
"12D3KooWLJzDBqzPrMnYkahBX4ptLoKd4eWJxZeDpFhg328JkBgX"
]
}
- cURL
curl -X GET -L https://tn-w-1.uledger.net//blockchains/{blockchainId} | jq
// Using native fetch (Node 18+)
const blockchainId =
"08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2";
const res = await fetch(
`https://tn-w-1.uledger.net//blockchains/${blockchainId}`
);
if (!res.ok) {
throw new Error(`Request failed with status ${res.status}`);
}
const info = await res.json();
console.log("Height:", info.blockHeight);
console.log("In council:", info.isInCouncil);
console.log("Council members:", info.councilMembers.length);
import requests
blockchain_id = "08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2"
resp = requests.get(f"https://tn-w-1.uledger.net//blockchains/{blockchain_id}")
resp.raise_for_status()
info = resp.json()
print("Height:", info["blockHeight"])
print("In council:", info["isInCouncil"])
print("Council members:", len(info["councilMembers"]))
Get Block by Height (query)
Some ULedger deployments also expose a query-parameter variant for fetching a block by height. This is functionally equivalent to GET /blockchains/{blockchainId}/blocks{height}, but uses a height query parameter instead of a path segment.
Request
GET /blockchains/{blockchainId}/blocks?height={height}
For a local development node, the full URL might look like:http://my.node1.uledger.io/blockchains/08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2/blocks?height=4
Path parameters
blockchainId– The blockchain identifier (one of the values returned byGET /blockchains).
Query parameters
height– The numeric height (index) of the block to fetch.
Response
The response body is the same block object described in Get Block above (same fields and structure). Refer to that section for a full example and field breakdown.
- cURL
curl -X GET -L http://my.node1.uledger.io/blockchains/{blockchainId}/blocks\?height\=4 | jq
// Using native fetch (Node 18+)
const blockchainId =
"08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2";
const height = 4;
const res = await fetch(
`http://my.node1.uledger.io/blockchains/${blockchainId}/blocks?height=${height}`,
{
headers: { Accept: "application/json" },
}
);
if (!res.ok) {
throw new Error(`Request failed with status ${res.status}`);
}
const block = await res.json();
console.log("Height:", block.height);
console.log("Hash:", block.blockHash);
console.log("Tx count:", block.transactions.length);
import requests
blockchain_id = "08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2"
height = 4
resp = requests.get(
f"http://my.node1.uledger.io/blockchains/{blockchain_id}/blocks",
params={"height": height},
headers={"Accept": "application/json"},
)
resp.raise_for_status()
block = resp.json()
print("Height:", block["height"])
print("Hash:", block["blockHash"])
print("Tx count:", len(block["transactions"]))